#include "stm32f10x.h"                  // Device header

#define Blue GPIO_Pin_4
#define Green GPIO_Pin_5
#define Red GPIO_Pin_6
#define White GPIO_Pin_7

void LED_Init(void)
{
	
	//开启GPIOA的时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);		
	
	/*GPIO初始化*/
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;					//推挽输出
	GPIO_InitStructure.GPIO_Pin = Blue | Green | Red | White;	//依次顺序:蓝绿红白
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);										
	
	/*设置GPIO初始化后的默认电平*/
	GPIO_SetBits(GPIOA, Blue | Green | Red | White);//设置为高电平,灯灭
 	
}

/**灯开
  * 函    数：LED开启,白，蓝，绿，红
  * 参    数：uint16_t led_Num
  * 返 回 值：无
  */
void LED_ON(uint16_t led_Num)
{
	switch(led_Num){
		case 0:GPIO_ResetBits(GPIOA, White);		//设置PA6引脚为低电平
			break;
		case 1:GPIO_ResetBits(GPIOA, Blue);			//设置PA0引脚为低电平
			break;
		case 2:GPIO_ResetBits(GPIOA, Green);		//设置PA1引脚为低电平
			break;
		case 3:GPIO_ResetBits(GPIOA, Red);			//设置PA2引脚为低电平
			break;
	}
}

/**灯关
  * 函    数：LED关闭，白，蓝，绿，红
  * 参    数：uint16_t led_Num
  * 返 回 值：无
  */
void LED_OFF(uint16_t led_Num)
{
	switch(led_Num){
		case 0:GPIO_SetBits(GPIOA, White);		//设置PA6引脚为高电平
			break;
		case 1:GPIO_SetBits(GPIOA, Blue);			//设置PA0引脚为高电平
			break;
		case 2:GPIO_SetBits(GPIOA, Green);		//设置PA1引脚为高电平
			break;
		case 3:GPIO_SetBits(GPIOA, Red);			//设置PA2引脚为高电平
			break;
	}
}

/**
  * 函    数：LED状态翻转
  * 参    数：uint16_t led_Num
  * 返 回 值：无
  */
void LED_Turn(uint16_t led_Num)
{
	switch(led_Num){
		case 0:if (GPIO_ReadOutputDataBit(GPIOA, White) == 0)		//获取输出寄存器的状态，如果当前引脚输出低电平
					{
						GPIO_SetBits(GPIOA, White);							//则设置PA1引脚为高电平
					}
				else																		//否则，即当前引脚输出高电平
					{
						GPIO_ResetBits(GPIOA, White);						//则设置PA1引脚为低电平
					}
			break;
		case 1:if (GPIO_ReadOutputDataBit(GPIOA, Blue) == 0)		//获取输出寄存器的状态，如果当前引脚输出低电平
					{
						GPIO_SetBits(GPIOA, Blue);							//则设置PA1引脚为高电平
					}
				else																		//否则，即当前引脚输出高电平
					{
						GPIO_ResetBits(GPIOA, Blue);						//则设置PA1引脚为低电平
					}
			break;
		case 2:if (GPIO_ReadOutputDataBit(GPIOA, Green) == 0)		//获取输出寄存器的状态，如果当前引脚输出低电平
					{
						GPIO_SetBits(GPIOA, Green);							//则设置PA1引脚为高电平
					}
				else																		//否则，即当前引脚输出高电平
					{
						GPIO_ResetBits(GPIOA, Green);						//则设置PA1引脚为低电平
					}
			break;
		case 3:if (GPIO_ReadOutputDataBit(GPIOA, Red) == 0)		//获取输出寄存器的状态，如果当前引脚输出低电平
					{
						GPIO_SetBits(GPIOA, Red);							//则设置PA1引脚为高电平
					}
					else																	//否则，即当前引脚输出高电平
					{
						GPIO_ResetBits(GPIOA, Red);						//则设置PA1引脚为低电平
					}
			break;
	}
	
}

